Code coverage report for src/composition-engine.js

Statements: 23.81% (20 / 84)      Branches: 0% (0 / 44)      Functions: 31.82% (7 / 22)      Lines: 24.39% (20 / 82)      Ignored: none     

All files » src/ » composition-engine.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 1561     1   1   1   1 1   1 1   1   1     1 1           1       1               1                         1                                                                                               1                                   1                                                           1     1        
System.register(['aurelia-metadata', './view-strategy', './view-engine', './html-behavior'], function (_export) {
  'use strict';
 
  var Origin, Metadata, ViewStrategy, UseViewStrategy, ViewEngine, HtmlBehaviorResource, CompositionEngine;
 
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  return {
    setters: [function (_aureliaMetadata) {
      Origin = _aureliaMetadata.Origin;
      Metadata = _aureliaMetadata.Metadata;
    }, function (_viewStrategy) {
      ViewStrategy = _viewStrategy.ViewStrategy;
      UseViewStrategy = _viewStrategy.UseViewStrategy;
    }, function (_viewEngine) {
      ViewEngine = _viewEngine.ViewEngine;
    }, function (_htmlBehavior) {
      HtmlBehaviorResource = _htmlBehavior.HtmlBehaviorResource;
    }],
    execute: function () {
      CompositionEngine = (function () {
        function CompositionEngine(viewEngine) {
          _classCallCheck(this, CompositionEngine);
 
          this.viewEngine = viewEngine;
        }
 
        CompositionEngine.inject = function inject() {
          return [ViewEngine];
        };
 
        CompositionEngine.prototype.activate = function activate(instruction) {
          if (instruction.skipActivation || typeof instruction.viewModel.activate !== 'function') {
            return Promise.resolve();
          }
 
          return instruction.viewModel.activate(instruction.model) || Promise.resolve();
        };
 
        CompositionEngine.prototype.createBehaviorAndSwap = function createBehaviorAndSwap(instruction) {
          return this.createBehavior(instruction).then(function (behavior) {
            behavior.view.bind(behavior.executionContext);
            instruction.viewSlot.swap(behavior.view);
 
            if (instruction.currentBehavior) {
              instruction.currentBehavior.unbind();
            }
 
            return behavior;
          });
        };
 
        CompositionEngine.prototype.createBehavior = function createBehavior(instruction) {
          var childContainer = instruction.childContainer,
              viewModelResource = instruction.viewModelResource,
              viewModel = instruction.viewModel,
              metadata;
 
          return this.activate(instruction).then(function () {
            var doneLoading, viewStrategyFromViewModel, origin;
 
            if ('getViewStrategy' in viewModel && !instruction.view) {
              viewStrategyFromViewModel = true;
              instruction.view = ViewStrategy.normalize(viewModel.getViewStrategy());
            }
 
            if (instruction.view) {
              if (viewStrategyFromViewModel) {
                origin = Origin.get(viewModel.constructor);
                if (origin) {
                  instruction.view.makeRelativeTo(origin.moduleId);
                }
              } else if (instruction.viewResources) {
                instruction.view.makeRelativeTo(instruction.viewResources.viewUrl);
              }
            }
 
            if (viewModelResource) {
              metadata = viewModelResource.metadata;
              doneLoading = metadata.load(childContainer, viewModelResource.value, instruction.view, true);
            } else {
              metadata = new HtmlBehaviorResource();
              metadata.elementName = 'dynamic-element';
              metadata.analyze(instruction.container || childContainer, viewModel.constructor);
              doneLoading = metadata.load(childContainer, viewModel.constructor, instruction.view, true).then(function (viewFactory) {
                return viewFactory;
              });
            }
 
            return doneLoading.then(function (viewFactory) {
              return metadata.create(childContainer, {
                executionContext: viewModel,
                viewFactory: viewFactory,
                suppressBind: true,
                host: instruction.host
              });
            });
          });
        };
 
        CompositionEngine.prototype.createViewModel = function createViewModel(instruction) {
          var childContainer = instruction.childContainer || instruction.container.createChild();
 
          instruction.viewModel = instruction.viewResources ? instruction.viewResources.relativeToView(instruction.viewModel) : instruction.viewModel;
 
          return this.viewEngine.importViewModelResource(instruction.viewModel).then(function (viewModelResource) {
            childContainer.autoRegister(viewModelResource.value);
 
            if (instruction.host) {
              childContainer.registerInstance(Element, instruction.host);
            }
 
            instruction.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);
            instruction.viewModelResource = viewModelResource;
            return instruction;
          });
        };
 
        CompositionEngine.prototype.compose = function compose(instruction) {
          var _this = this;
 
          instruction.childContainer = instruction.childContainer || instruction.container.createChild();
          instruction.view = ViewStrategy.normalize(instruction.view);
 
          if (instruction.viewModel) {
            if (typeof instruction.viewModel === 'string') {
              return this.createViewModel(instruction).then(function (instruction) {
                return _this.createBehaviorAndSwap(instruction);
              });
            } else {
              return this.createBehaviorAndSwap(instruction);
            }
          } else if (instruction.view) {
            if (instruction.viewResources) {
              instruction.view.makeRelativeTo(instruction.viewResources.viewUrl);
            }
 
            return instruction.view.loadViewFactory(this.viewEngine).then(function (viewFactory) {
              var result = viewFactory.create(instruction.childContainer, instruction.executionContext);
              instruction.viewSlot.swap(result);
              return result;
            });
          } else if (instruction.viewSlot) {
            instruction.viewSlot.removeAll();
            return Promise.resolve(null);
          }
        };
 
        return CompositionEngine;
      })();
 
      _export('CompositionEngine', CompositionEngine);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL2NvbXBvc2l0aW9uLWVuZ2luZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7eUZBS2EsaUJBQWlCOzs7Ozs7Z0NBTHRCLE1BQU07a0NBQUMsUUFBUTs7bUNBQ2YsWUFBWTtzQ0FBRSxlQUFlOzsrQkFDN0IsVUFBVTs7MkNBQ1Ysb0JBQW9COzs7QUFFZix1QkFBaUI7QUFFakIsaUJBRkEsaUJBQWlCLENBRWhCLFVBQVUsRUFBQztnQ0FGWixpQkFBaUI7O0FBRzFCLGNBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQzlCOztBQUpVLHlCQUFpQixDQUNyQixNQUFNLEdBQUEsa0JBQUU7QUFBRSxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQUU7O0FBRDVCLHlCQUFpQixXQU01QixRQUFRLEdBQUEsa0JBQUMsV0FBVyxFQUFDO0FBQ25CLGNBQUcsV0FBVyxDQUFDLGNBQWMsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBQztBQUNwRixtQkFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7V0FDMUI7O0FBRUQsaUJBQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvRTs7QUFaVSx5QkFBaUIsV0FjNUIscUJBQXFCLEdBQUEsK0JBQUMsV0FBVyxFQUFDO0FBQ2hDLGlCQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxFQUFJO0FBQ3ZELG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM5Qyx1QkFBVyxDQUFDLFFBQVEsQ0FBQyxJ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LEVBQUk7QUFDM0QsdUJBQU8sTUFBSyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztlQUNoRCxDQUFDLENBQUM7YUFDSixNQUFJO0FBQ0gscUJBQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hEO1dBQ0YsTUFBSyxJQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUM7QUFDeEIsZ0JBQUcsV0FBVyxDQUFDLGFBQWEsRUFBQztBQUMzQix5QkFBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNwRTs7QUFFRCxtQkFBTyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsV0FBVyxFQUFJO0FBQzNFLGtCQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDMUYseUJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLHFCQUFPLE1BQU0sQ0FBQzthQUNmLENBQUMsQ0FBQztXQUNKLE1BQUssSUFBRyxXQUFXLENBQUMsUUFBUSxFQUFDO0FBQzVCLHVCQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pDLG1CQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDOUI7U0FDRjs7ZUF6SFUsaUJBQWlCOzs7bUNBQWpCLGlCQUFpQiIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS90ZW1wbGF0aW5nL3NyYy9jb21wb3NpdGlvbi1lbmdpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09yaWdpbixNZXRhZGF0YX0gZnJvbSAnYXVyZWxpYS1tZXRhZGF0YSc7XG5pbXBvcnQge1ZpZXdTdHJhdGVneSwgVXNlVmlld1N0cmF0ZWd5fSBmcm9tICcuL3ZpZXctc3RyYXRlZ3knO1xuaW1wb3J0IHtWaWV3RW5naW5lfSBmcm9tICcuL3ZpZXctZW5naW5lJztcbmltcG9ydCB7SHRtbEJlaGF2aW9yUmVzb3VyY2V9IGZyb20gJy4vaHRtbC1iZWhhdmlvcic7XG5cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGlvbkVuZ2luZSB7XG4gIHN0YXRpYyBpbmplY3QoKXsgcmV0dXJuIFtWaWV3RW5naW5lXTsgfVxuICBjb25zdHJ1Y3Rvcih2aWV3RW5naW5lKXtcbiAgICB0aGlzLnZpZXdFbmdpbmUgPSB2aWV3RW5naW5lO1xuICB9XG5cbiAgYWN0aXZhdGUoaW5zdHJ1Y3Rpb24pe1xuICAgIGlmKGluc3RydWN0aW9uLnNraXBBY3RpdmF0aW9uIHx8IHR5cGVvZiBpbnN0cnVjdGlvbi52aWV3TW9kZWwuYWN0aXZhdGUgIT09ICdmdW5jdGlvbicpe1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbi52aWV3TW9kZWwuYWN0aXZhdGUoaW5zdHJ1Y3Rpb24ubW9kZWwpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgY3JlYXRlQmVoYXZpb3JBbmRTd2FwKGluc3RydWN0aW9uKXtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvcihpbnN0cnVjdGlvbikudGhlbihiZWhhdmlvciA9PiB7XG4gICAgICBiZWhhdmlvci52aWV3LmJpbmQoYmVoYXZpb3IuZXhlY3V0aW9uQ29udGV4dCk7XG4gICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5zd2FwKGJlaGF2aW9yLnZpZXcpO1xuXG4gICAgICBpZihpbnN0cnVjdGlvbi5jdXJyZW50QmVoYXZpb3Ipe1xuICAgICAgICBpbnN0cnVjdGlvbi5jdXJyZW50QmVoYXZpb3IudW5iaW5kKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiZWhhdmlvcjtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUJlaGF2aW9yKGluc3RydWN0aW9uKXtcbiAgICB2YXIgY2hpbGRDb250YWluZXIgPSBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lcixcbiAgICAgICAgdmlld01vZGVsUmVzb3VyY2UgPSBpbnN0cnVjdGlvbi52aWV3TW9kZWxSZXNvdXJjZSxcbiAgICAgICAgdmlld01vZGVsID0gaW5zdHJ1Y3Rpb24udmlld01vZGVsLFxuICAgICAgICBtZXRhZGF0YTtcblxuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlKGluc3RydWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgIHZhciBkb25lTG9hZGluZywgdmlld1N0cmF0ZWd5RnJvbVZpZXdNb2RlbCwgb3JpZ2luO1xuXG4gICAgICBpZignZ2V0Vmlld1N0cmF0ZWd5JyBpbiB2aWV3TW9kZWwgJiYgIWluc3RydWN0aW9uLnZpZXcpe1xuICAgICAgICB2aWV3U3RyYXRlZ3lGcm9tVmlld01vZGVsID0gdHJ1ZTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlldyA9IFZpZXdTdHJhdGVneS5ub3JtYWxpemUodmlld01vZGVsLmdldFZpZXdTdHJhdGVneSgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydWN0aW9uLnZpZXcpIHtcbiAgICAgICAgaWYodmlld1N0cmF0ZWd5RnJvbVZpZXdNb2RlbCl7XG4gICAgICAgICAgb3JpZ2luID0gT3JpZ2luLmdldCh2aWV3TW9kZWwuY29uc3RydWN0b3IpO1xuICAgICAgICAgIGlmKG9yaWdpbil7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3Lm1ha2VSZWxhdGl2ZVRvKG9yaWdpbi5tb2R1bGVJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9ZWxzZSBpZihpbnN0cnVjdGlvbi52aWV3UmVzb3VyY2VzKXtcbiAgICAgICAgICBpbnN0cnVjdGlvbi52aWV3Lm1ha2VSZWxhdGl2ZVRvKGluc3RydWN0aW9uLnZpZXdSZXNvdXJjZXMudmlld1VybCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYodmlld01vZGVsUmVzb3VyY2Upe1xuICAgICAgICBtZXRhZGF0YSA9IHZpZXdNb2RlbFJlc291cmNlLm1ldGFkYXRhO1xuICAgICAgICBkb25lTG9hZGluZyA9IG1ldGFkYXRhLmxvYWQoY2hpbGRDb250YWluZXIsIHZpZXdNb2RlbFJlc291cmNlLnZhbHVlLCBpbnN0cnVjdGlvbi52aWV3LCB0cnVlKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBtZXRhZGF0YSA9IG5ldyBIdG1sQmVoYXZpb3JSZXNvdXJjZSgpO1xuICAgICAgICBtZXRhZGF0YS5lbGVtZW50TmFtZSA9ICdkeW5hbWljLWVsZW1lbnQnO1xuICAgICAgICBtZXRhZGF0YS5hbmFseXplKGluc3RydWN0aW9uLmNvbnRhaW5lciB8fCBjaGlsZENvbnRhaW5lciwgdmlld01vZGVsLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgZG9uZUxvYWRpbmcgPSBtZXRhZGF0YS5sb2FkKGNoaWxkQ29udGFpbmVyLCB2aWV3TW9kZWwuY29uc3RydWN0b3IsIGluc3RydWN0aW9uLnZpZXcsIHRydWUpLnRoZW4odmlld0ZhY3RvcnkgPT4ge1xuICAgICAgICAgIHJldHVybiB2aWV3RmFjdG9yeTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkb25lTG9hZGluZy50aGVuKHZpZXdGYWN0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmNyZWF0ZShjaGlsZENvbnRhaW5lciwge1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6dmlld01vZGVsLFxuICAgICAgICAgIHZpZXdGYWN0b3J5OnZpZXdGYWN0b3J5LFxuICAgICAgICAgIHN1cHByZXNzQmluZDp0cnVlLFxuICAgICAgICAgIGhvc3Q6aW5zdHJ1Y3Rpb24uaG9zdFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVmlld01vZGVsKGluc3RydWN0aW9uKXtcbiAgICB2YXIgY2hpbGRDb250YWluZXIgPSBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lciB8fCBpbnN0cnVjdGlvbi5jb250YWluZXIuY3JlYXRlQ2hpbGQoKTtcblxuICAgIGluc3RydWN0aW9uLnZpZXdNb2RlbCA9IGluc3RydWN0aW9uLnZpZXdSZXNvdXJjZXNcbiAgICAgICAgPyBpbnN0cnVjdGlvbi52aWV3UmVzb3VyY2VzLnJlbGF0aXZlVG9WaWV3KGluc3RydWN0aW9uLnZpZXdNb2RlbClcbiAgICAgICAgOiBpbnN0cnVjdGlvbi52aWV3TW9kZWw7XG5cbiAgICByZXR1cm4gdGhpcy52aWV3RW5naW5lLmltcG9ydFZpZXdNb2RlbFJlc291cmNlKGluc3RydWN0aW9uLnZpZXdNb2RlbCkudGhlbih2aWV3TW9kZWxSZXNvdXJjZSA9PiB7XG4gICAgICBjaGlsZENvbnRhaW5lci5hdXRvUmVnaXN0ZXIodmlld01vZGVsUmVzb3VyY2UudmFsdWUpO1xuXG4gICAgICBpZihpbnN0cnVjdGlvbi5ob3N0KXtcbiAgICAgICAgY2hpbGRDb250YWluZXIucmVnaXN0ZXJJbnN0YW5jZShFbGVtZW50LCBpbnN0cnVjdGlvbi5ob3N0KTtcbiAgICAgIH1cblxuICAgICAgaW5zdHJ1Y3Rpb24udmlld01vZGVsID0gY2hpbGRDb250YWluZXIudmlld01vZGVsID0gY2hpbGRDb250YWluZXIuZ2V0KHZpZXdNb2RlbFJlc291cmNlLnZhbHVlKTtcbiAgICAgIGluc3RydWN0aW9uLnZpZXdNb2RlbFJlc291cmNlID0gdmlld01vZGVsUmVzb3VyY2U7XG4gICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247XG4gICAgfSk7XG4gIH1cblxuICBjb21wb3NlKGluc3RydWN0aW9uKXtcbiAgICBpbnN0cnVjdGlvbi5jaGlsZENvbnRhaW5lciA9IGluc3RydWN0aW9uLmNoaWxkQ29udGFpbmVyIHx8IGluc3RydWN0aW9uLmNvbnRhaW5lci5jcmVhdGVDaGlsZCgpO1xuICAgIGluc3RydWN0aW9uLnZpZXcgPSBWaWV3U3RyYXRlZ3kubm9ybWFsaXplKGluc3RydWN0aW9uLnZpZXcpO1xuXG4gICAgaWYoaW5zdHJ1Y3Rpb24udmlld01vZGVsKXtcbiAgICAgIGlmKHR5cGVvZiBpbnN0cnVjdGlvbi52aWV3TW9kZWwgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmlld01vZGVsKGluc3RydWN0aW9uKS50aGVuKGluc3RydWN0aW9uID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvckFuZFN3YXAoaW5zdHJ1Y3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCZWhhdmlvckFuZFN3YXAoaW5zdHJ1Y3Rpb24pO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGluc3RydWN0aW9uLnZpZXcpe1xuICAgICAgaWYoaW5zdHJ1Y3Rpb24udmlld1Jlc291cmNlcyl7XG4gICAgICAgIGluc3RydWN0aW9uLnZpZXcubWFrZVJlbGF0aXZlVG8oaW5zdHJ1Y3Rpb24udmlld1Jlc291cmNlcy52aWV3VXJsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RydWN0aW9uLnZpZXcubG9hZFZpZXdGYWN0b3J5KHRoaXMudmlld0VuZ2luZSkudGhlbih2aWV3RmFjdG9yeSA9PiB7XG4gICAgICAgIHZhciByZXN1bHQgPSB2aWV3RmFjdG9yeS5jcmVhdGUoaW5zdHJ1Y3Rpb24uY2hpbGRDb250YWluZXIsIGluc3RydWN0aW9uLmV4ZWN1dGlvbkNvbnRleHQpO1xuICAgICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5zd2FwKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9ZWxzZSBpZihpbnN0cnVjdGlvbi52aWV3U2xvdCl7XG4gICAgICBpbnN0cnVjdGlvbi52aWV3U2xvdC5yZW1vdmVBbGwoKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9XG59XG4iXX0=